Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

YAXUnit, вторая попытка #114

Merged
merged 27 commits into from
May 8, 2024

Conversation

ovcharenko-di
Copy link
Contributor

@ovcharenko-di ovcharenko-di commented Mar 18, 2024

Вместо #94
Решил выделить в отдельный PR, чтобы было удобно работать с ним напрямую.

Для решения проблемы с подключением расширений после доп. шагов инициализации (где могут создаваться пользователи ИБ) я добавил возможность использования vrunner.json в initInfoBase.

Summary by CodeRabbit

  • Новые функции

    • Добавлена возможность запуска unit-тестов с использованием фреймворка YAXUnit и сохранение результатов в форматах jUnit и Allure.
    • Введена поддержка конфигураций yaxunitOptions для расширения настроек конфигурации.
    • Добавлены этапы для тестов YAXUnit в скрипт пайплайна, включая конфигурацию агентов и шаги для выполнения тестов YAXUnit наряду с существующими этапами для BDD и дымовых тестов.
  • Исправления ошибок

    • Исправлена инициализация значений по умолчанию в классах конфигурации.
  • Обновления зависимостей

    • Обновлено ядро mockito-core с версии 3.3.3 до 5.11.0.
  • Рефакторинг

    • Добавлен новый метод writeFile для записи текста в файл с указанной кодировкой.
    • Улучшена логика определения необходимости определенных шагов на основе новой переменной yaxunit.
    • Оптимизирована работа с расширениями и настройками VRunner для конкретных этапов.
  • Тесты

    • Добавлены новые тесты для проверки функциональности загрузки расширений в библиотеке Jenkins.
    • Введены новые утверждения в тестах конфигурации задач.

Copy link
Contributor

coderabbitai bot commented Mar 18, 2024

Обзор изменений

Обновление зависимостей и расширение функциональности в проекте Jenkins. Добавлены новые методы для работы с файлами, поддержка конфигурации YAXUnit, а также улучшена логика загрузки расширений. Оптимизированы тесты и обновлены документации.

Изменения

Файлы Описание изменений
build.gradle.kts Обновление зависимости mockito-core, добавление пустых строк
src/.../IStepExecutor.groovy, src/.../StepExecutor.groovy Добавление метода writeFile
src/.../configuration/*.groovy Расширение поддержки конфигураций, добавление yaxunitOptions, обновление классов и методов
src/.../steps/*.groovy Добавление и обновление методов для работы с расширениями и тестами YAXUnit
vars/*.groovy Добавление и обновление скриптов для работы со стадиями и расширениями
test/.../*.groovy, test/.../*.java Добавление новых тестов и утверждений
README.md Обновление документации с учетом новых функций и тестов

Стих

🐇 "В коде мир создаю я новый,
🌟 Изменения вношу с любовью.
📜 Строк за строкой — как ноты в песне,
🛠️ Каждый коммит — мой маленький шедевр.
🎉 Пусть будет код чист, как звездный свет!"


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

Share
Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai generate interesting stats about this repository and render them as a table.
    • @coderabbitai show all the console.log statements in this repository.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (invoked as PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger a review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai help to get help.

Additionally, you can add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.

CodeRabbit Configration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Status

Actionable comments generated: 1

Configuration used: CodeRabbit UI

Commits Files that changed from the base of the PR and between 835873f and 13ce9cf.
Files ignored due to path filters (4)
  • resources/globalConfiguration.json is excluded by: !**/*.json
  • resources/schema.json is excluded by: !**/*.json
  • resources/yaxunit.json is excluded by: !**/*.json
  • test/integration/resources/jobConfiguration.json is excluded by: !**/*.json
Files selected for processing (17)
  • README.md (2 hunks)
  • build.gradle.kts (2 hunks)
  • src/ru/pulsar/jenkins/library/IStepExecutor.groovy (1 hunks)
  • src/ru/pulsar/jenkins/library/StepExecutor.groovy (1 hunks)
  • src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy (1 hunks)
  • src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy (3 hunks)
  • src/ru/pulsar/jenkins/library/configuration/JobConfiguration.groovy (2 hunks)
  • src/ru/pulsar/jenkins/library/configuration/StageFlags.groovy (2 hunks)
  • src/ru/pulsar/jenkins/library/configuration/TimeoutOptions.groovy (1 hunks)
  • src/ru/pulsar/jenkins/library/configuration/YaxunitOptions.groovy (1 hunks)
  • src/ru/pulsar/jenkins/library/steps/LoadExtensions.groovy (3 hunks)
  • src/ru/pulsar/jenkins/library/steps/PublishAllure.groovy (2 hunks)
  • src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy (1 hunks)
  • src/ru/pulsar/jenkins/library/utils/VRunner.groovy (2 hunks)
  • test/integration/groovy/jobConfigurationTest.groovy (1 hunks)
  • vars/pipeline1C.groovy (1 hunks)
  • vars/yaxunit.groovy (1 hunks)
Files skipped from review due to trivial changes (1)
  • src/ru/pulsar/jenkins/library/utils/VRunner.groovy
Additional comments: 25
vars/yaxunit.groovy (1)
  • 1-12: Изменения в файле vars/yaxunit.groovy выглядят корректно и соответствуют задаче интеграции YAXUnit в Jenkins pipeline.
src/ru/pulsar/jenkins/library/configuration/YaxunitOptions.groovy (1)
  • 1-40: Изменения в файле src/ru/pulsar/jenkins/library/configuration/YaxunitOptions.groovy корректны и соответствуют задаче конфигурации YAXUnit.
src/ru/pulsar/jenkins/library/configuration/StageFlags.groovy (2)
  • 21-22: Добавление флага yaxunit корректно и соответствует задаче интеграции YAXUnit.
  • 52-52: Изменение метода needInfoBase для включения флага yaxunit в логику определения необходимости информационной базы является корректным.
src/ru/pulsar/jenkins/library/steps/PublishAllure.groovy (1)
  • 36-38: Добавление условия для yaxunit в метод run для извлечения результатов тестов YAXUnit корректно и улучшает интеграцию с Allure.
src/ru/pulsar/jenkins/library/steps/LoadExtensions.groovy (1)
  • 50-53: Добавление условия проверки существования файла настроек vrunner и его использование в команде загрузки расширения улучшает гибкость и надежность процесса загрузки расширений.
test/integration/groovy/jobConfigurationTest.groovy (1)
  • 77-77: Добавление утверждения для "custom_units" расширяет покрытие тестами и улучшает проверку корректности работы конфигурации.
src/ru/pulsar/jenkins/library/configuration/TimeoutOptions.groovy (1)
  • 69-72: Добавление поля yaxunit для указания таймаута тестов YAXUnit корректно и улучшает конфигурируемость таймаутов различных этапов CI/CD.
src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy (3)
  • 17-17: Обновление значения по умолчанию для initMethod улучшает понимание кода и соответствует задаче улучшения конфигурации.
  • 29-34: Удаление точек с запятой и обновление значений по умолчанию улучшает читаемость и консистентность кода.
  • 39-54: Обновление значений по умолчанию для класса Extension улучшает понимание и использование класса.
src/ru/pulsar/jenkins/library/IStepExecutor.groovy (1)
  • 29-30: Добавлен метод writeFile в интерфейс IStepExecutor. Убедитесь, что реализации этого метода в классах, реализующих интерфейс, корректно обрабатывают исключения и безопасно работают с файловой системой.
src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy (1)
  • 24-89: Класс Yaxunit корректно реализует логику выполнения YAXUnit тестов. Особое внимание стоит уделить безопасности работы с файлами и корректности выполнения команд. Убедитесь, что все потенциальные исключения обрабатываются должным образом, чтобы обеспечить точность результатов тестирования.
build.gradle.kts (1)
  • 64-65: Добавлена зависимость spring-security-core в блок integrationTestImplementation. Убедитесь, что выбранная версия зависимости соответствует требованиям проекта и не вызывает конфликтов с другими зависимостями.
src/ru/pulsar/jenkins/library/configuration/JobConfiguration.groovy (1)
  • 58-61: Добавлено поле yaxunitOptions в класс JobConfiguration, что расширяет возможности конфигурации YAXUnit тестирования. Убедитесь, что поле корректно используется в логике приложения и аннотировано для правильной сериализации и десериализации.
src/ru/pulsar/jenkins/library/StepExecutor.groovy (1)
  • 45-48: Реализация метода writeFile в классе StepExecutor корректно добавлена. Убедитесь, что метод безопасно работает с файловой системой и корректно обрабатывает исключения, чтобы предотвратить потенциальные проблемы при записи файлов.
src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy (1)
  • 68-69: Добавлена поддержка yaxunitOptions и extensions в классе ConfigurationReader. Убедитесь, что новые поля корректно обрабатываются при чтении конфигурации и не вызывают проблем с совместимостью или безопасностью.
vars/pipeline1C.groovy (1)
  • 247-262: Добавлена стадия YAXUnit тесты в скрипт пайплайна. Убедитесь, что стадия корректно настроена и не влияет на производительность или стабильность пайплайна. Важно также проверить, что тесты выполняются как ожидается и результаты корректно обрабатываются.
README.md (7)
  • 36-42: > 📝 NOTE

This review was outside the diff hunks, and no overlapping diff hunk was found. Original lines [8-8]

Возможно, найдена орфографическая ошибка в слове "пайплайн". В русском языке принято использовать слово "пайплайн" для обозначения конвейера в контексте разработки программного обеспечения, однако стоит учитывать контекст и возможные стилистические предпочтения.

  • 36-42: > 📝 NOTE

This review was outside the diff hunks, and no overlapping diff hunk was found. Original lines [13-13]

Это предложение не начинается с заглавной буквы. Рекомендуется начинать каждый пункт списка с заглавной буквы для единообразия и лучшей читаемости.

  • 39-39: Возможно, найдена орфографическая ошибка в слове "юнит-тестов". В русском языке принято использование термина "юнит-тесты" для обозначения модульных тестов, однако стоит учитывать контекст и возможные стилистические предпочтения.
  • 36-42: > 📝 NOTE

This review was outside the diff hunks, and no overlapping diff hunk was found. Original lines [45-45]

Возможно, найдена орфографическая ошибка в слове "oscript-приложений". В контексте данного документа использование термина "oscript" корректно, так как он относится к конкретной технологии. Однако, стоит убедиться, что это название используется единообразно по всему документу.

  • 36-42: > 📝 NOTE

This review was outside the diff hunks, and no overlapping diff hunk was found. Original lines [67-67]

Возможно, найдена орфографическая ошибка в слове "пайплайн". В русском языке принято использовать слово "пайплайн" для обозначения конвейера в контексте разработки программного обеспечения, однако стоит учитывать контекст и возможные стилистические предпочтения.

  • 36-42: > 📝 NOTE

This review was outside the diff hunks, and no overlapping diff hunk was found. Original lines [69-69]

Возможно, найдена орфографическая ошибка в слове "пайплайна". В русском языке принято использовать слово "пайплайн" для обозначения конвейера в контексте разработки программного обеспечения, однако стоит учитывать контекст и возможные стилистические предпочтения.

  • 36-42: > 📝 NOTE

This review was outside the diff hunks, and no overlapping diff hunk was found. Original lines [124-124]

Возможно, найдена орфографическая ошибка в слове "тяжёлости". В данном контексте использование слова "тяжёлости" корректно, так как оно относится к сложности или ресурсоёмкости шагов сборки. Однако, стоит убедиться, что это слово используется единообразно по всему документу.

build.gradle.kts Outdated Show resolved Hide resolved
README.md Outdated Show resolved Hide resolved
@nixel2007
Copy link
Member

Может это, "скоммуницироваться в социуме" с @Segate-ekb на тему списка стейджей, когда грузить? Можно ещё vrunner.json прям в элемент Extension добавить

@Segate-ekb
Copy link
Contributor

Может это, "скоммуницироваться в социуме" с @Segate-ekb на тему списка стейджей, когда грузить? Можно ещё vrunner.json прям в элемент Extension добавить

Ну как по мне, то проще всего предусмотреть возможность грузить везде, где используется предприятие+ дефолтная точка загрузки, как сейчас.
На данный момент- это Смоуки, бдд, yaxunit и инициализация бд

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Status

Actionable comments generated: 8

Configuration used: CodeRabbit UI

Commits Files that changed from the base of the PR and between 13ce9cf and 9f0a922.
Files ignored due to path filters (1)
  • resources/globalConfiguration.json is excluded by: !**/*.json
Files selected for processing (9)
  • README.md (5 hunks)
  • build.gradle.kts (2 hunks)
  • src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy (3 hunks)
  • src/ru/pulsar/jenkins/library/configuration/JobConfiguration.groovy (3 hunks)
  • src/ru/pulsar/jenkins/library/steps/LoadExtensions.groovy (2 hunks)
  • src/ru/pulsar/jenkins/library/steps/PublishAllure.groovy (2 hunks)
  • test/unit/groovy/ru/pulsar/jenkins/library/steps/LoadExtensionsTest.java (1 hunks)
  • vars/loadExtensions.groovy (1 hunks)
  • vars/pipeline1C.groovy (2 hunks)
Files skipped from review as they are similar to previous changes (6)
  • build.gradle.kts
  • src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy
  • src/ru/pulsar/jenkins/library/configuration/JobConfiguration.groovy
  • src/ru/pulsar/jenkins/library/steps/LoadExtensions.groovy
  • src/ru/pulsar/jenkins/library/steps/PublishAllure.groovy
  • vars/pipeline1C.groovy
Additional comments: 2
vars/loadExtensions.groovy (1)
  • 5-5: Добавление параметра по умолчанию stageName к функции call улучшает гибкость и читаемость кода. Однако, стоит добавить комментарий в коде, описывающий назначение и возможные значения этого параметра, чтобы упростить понимание кода для других разработчиков.
README.md (1)
  • 111-111: В предыдущих комментариях была указана ошибка в слове "По-умолчанию". Правильно писать слитно: "по умолчанию".

// when
Object run = loadExtensions.run();

// assertThat(log.toString).(1);
Copy link
Contributor

@coderabbitai coderabbitai bot Mar 19, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Комментарий утверждения в тесте не позволяет проверить корректность работы метода run. Рекомендуется дописать утверждение для проверки ожидаемого результата выполнения метода.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@nixel2007 вот с этим нужна помощь

я хочу в тесте запустить этот метод и проверить, что расширения фильтруются в зависимости от stage. но т.к. при выполнении теста не определен env, то при обращении к env.NODE_NAME в Logger вылетает NPE

немного попробовал замокать контекст, но с ходу не вышло, т.к. env - это абстрактный класс

нужна подсказка, как лучше сделать

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems like the humans are having a chat. I'll hop back into my burrow for now. If you need me again, just tag @coderabbitai in a new comment, and I'll come hopping out!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@nixel2007 тест дописал. Решил создать свой класс EnvUtils, который реализует нужный интерфейс. Правда, нужные поля в этот класс я добавил непосредственно и захардкодил значения. Не очень красиво, но тест работает.

Comment on lines 36 to 42
1. Трансформация кода из формата конфигуратора в формат EDT.
1. Трансформация кода из формата EDT в формат конфигуратора.
1. Запуск BDD сценариев с сохранением результатов в формате Allure.
1. Запуск юнит-тестов с помощью фреймворка YAXUnit с сохранением результатов в формате jUnit и Allure.
1. Запуск синтаксического контроля средствами конфигуратора и сохранение результатов в виде отчета jUnit.
1. Запуск валидации проекта средствами EDT и конвертация отчета в формате generic issues.
1. Запуск статического анализа для SonarQube.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 NOTE
This review was outside the diff hunks, and no overlapping diff hunk was found. Original lines [8-8]

Возможно, найдена орфографическая ошибка. Правильно будет: "иметь схожий и контролируемый пайплайн для всех проектов; дать пользователю".


📝 NOTE
This review was outside the diff hunks, and no overlapping diff hunk was found. Original lines [13-13]

Это предложение не начинается с заглавной буквы. Рекомендуется начать с заглавной для единообразия стиля документации.


📝 NOTE
This review was outside the diff hunks, and no overlapping diff hunk was found. Original lines [45-45]

Возможно, найдена орфографическая ошибка. Правильно будет: "Конфигурирование логгера запускаемых oscript-приложений".


📝 NOTE
This review was outside the diff hunks, and no overlapping diff hunk was found. Original lines [67-67]

Возможно, найдена орфографическая ошибка. Правильно будет: "Да, вот и весь пайплайн. Конфигурирование через json".


📝 NOTE
This review was outside the diff hunks, and no overlapping diff hunk was found. Original lines [69-69]

Возможно, найдена орфографическая ошибка. Правильно будет: "Внешний вид пайплайна в интерфейсе Blue Ocean".


📝 NOTE
This review was outside the diff hunks, and no overlapping diff hunk was found. Original lines [124-124]

Возможно, найдена орфографическая ошибка. Правильно будет: "минутах (от 10 до 240 в зависимости от 'тяжести' шага сборки), но может быть переопределен".

README.md Show resolved Hide resolved
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Status

Actionable comments generated: 0

Configuration used: CodeRabbit UI

Commits Files that changed from the base of the PR and between 9f0a922 and 6f422b1.
Files selected for processing (1)
  • vars/pipeline1C.groovy (2 hunks)
Files skipped from review as they are similar to previous changes (1)
  • vars/pipeline1C.groovy

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Status

Actionable comments generated: 0

Configuration used: CodeRabbit UI

Commits Files that changed from the base of the PR and between 6f422b1 and 6efdf8e.
Files selected for processing (2)
  • src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy (1 hunks)
  • vars/pipeline1C.groovy (2 hunks)
Files skipped from review as they are similar to previous changes (2)
  • src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy
  • vars/pipeline1C.groovy

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Status

Actionable comments generated: 0

Configuration used: CodeRabbit UI

Commits Files that changed from the base of the PR and between 6efdf8e and 8cb9103.
Files selected for processing (1)
  • src/ru/pulsar/jenkins/library/steps/LoadExtensions.groovy (2 hunks)
Files skipped from review as they are similar to previous changes (1)
  • src/ru/pulsar/jenkins/library/steps/LoadExtensions.groovy

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Status

Actionable comments generated: 2

Configuration used: CodeRabbit UI

Commits Files that changed from the base of the PR and between ec46250 and 3f6ec51.
Files ignored due to path filters (2)
  • resources/schema.json is excluded by !**/*.json
  • test/unit/resources/jobConfiguration.json is excluded by !**/*.json
Files selected for processing (7)
  • build.gradle.kts (3 hunks)
  • src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy (3 hunks)
  • src/ru/pulsar/jenkins/library/steps/LoadExtensions.groovy (2 hunks)
  • test/integration/groovy/jobConfigurationTest.groovy (1 hunks)
  • test/unit/groovy/ru/pulsar/jenkins/library/steps/LoadExtensionsTest.java (1 hunks)
  • test/unit/groovy/ru/pulsar/jenkins/library/utils/EnvUtils.java (1 hunks)
  • test/unit/groovy/ru/pulsar/jenkins/library/utils/TestUtils.java (1 hunks)
Additional comments (10)
test/unit/groovy/ru/pulsar/jenkins/library/steps/LoadExtensionsTest.java (2)
  • 24-26: Метод setUp использует TestUtils.setupMockedContext() для настройки мокированного контекста перед каждым тестом. Убедитесь, что это действительно необходимо для всех тестов в классе.
  • 30-52: Тест runYaxunit проверяет, что расширения фильтруются в зависимости от стадии. Однако, важно также проверить, что фильтрация происходит корректно и что остальная логика метода run работает как ожидается. Рассмотрите возможность добавления дополнительных утверждений для полноты теста.
test/unit/groovy/ru/pulsar/jenkins/library/utils/TestUtils.java (1)
  • 31-31: Добавление мокирования поведения steps.env() в методе getMockedStepExecutor позволяет тестам получать экземпляр EnvUtils вместо реального окружения. Это улучшение помогает избежать NullPointerException при тестировании кода, зависящего от переменных окружения.
test/integration/groovy/jobConfigurationTest.groovy (1)
  • 50-50: Удаление точки с запятой в Groovy коде является допустимым, так как в Groovy точки с запятой не обязательны. Однако, стоит следить за единообразием стиля кода в проекте.
src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy (2)
  • 17-17: Изменение значения по умолчанию для initMethod на FROM_STORAGE не влияет на поведение, так как новое значение совпадает с предыдущим. Убедитесь, что это изменение действительно необходимо.
  • 56-56: Добавление поля stages в класс Extension позволяет более гибко управлять загрузкой расширений на различных этапах. Это улучшение способствует более тонкой настройке процесса инициализации и расширения функциональности.
src/ru/pulsar/jenkins/library/steps/LoadExtensions.groovy (2)
  • 14-22: Добавление полей stageName и extensionsFiltered в класс LoadExtensions, а также изменение конструктора для приема stageName улучшает гибкость класса, позволяя фильтровать расширения в зависимости от этапа. Это положительно сказывается на модульности и расширяемости кода.
  • 33-42: Обновленная логика в методе run для фильтрации расширений в зависимости от stageName улучшает управление расширениями, делая процесс более гибким и настраиваемым. Это значительное улучшение для работы с расширениями на разных этапах.
build.gradle.kts (2)
  • 51-51: Обновление зависимости mockito-core до версии 5.11.0 улучшает совместимость и предоставляет доступ к новым функциям и исправлениям. Это положительное изменение для поддержки качества тестирования.
  • 64-64: Добавление пустых строк для улучшения читаемости кода является хорошей практикой. Однако, стоит следить за тем, чтобы подобные изменения не приводили к неединообразию в форматировании кода в проекте.

Comment on lines +10 to +11
public String NODE_NAME = "node";
public String WORKSPACE = "ws";
Copy link
Contributor

@coderabbitai coderabbitai bot Mar 28, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Публичные поля NODE_NAME и WORKSPACE в классе EnvUtils должны быть объявлены как static final и именованы в верхнем регистре, согласно конвенции именования констант в Java.

-    public String NODE_NAME = "node";
-    public String WORKSPACE = "ws";
+    public static final String NODE_NAME = "node";
+    public static final String WORKSPACE = "ws";

Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation.

Suggested change
public String NODE_NAME = "node";
public String WORKSPACE = "ws";
public static final String NODE_NAME = "node";
public static final String WORKSPACE = "ws";

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@nixel2007 вот эти поля, про которые я говорил

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems like the humans are having a chat. I'll hop back into my burrow for now. If you need me again, just tag @coderabbitai in a new comment, and I'll come hopping out!

Comment on lines +14 to +31
public EnvVars getEnvironment() throws IOException, InterruptedException {
return null;
}

@Override
public String getIconFileName() {
return null;
}

@Override
public String getDisplayName() {
return null;
}

@Override
public String getUrlName() {
return null;
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Все переопределенные методы в классе EnvUtils возвращают null. Это может привести к NullPointerException при их использовании. Рекомендуется реализовать эти методы или добавить комментарии, объясняющие, почему они не реализованы.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Comment on lines +6 to +10
try {
unstash GetExtensions.EXTENSIONS_STASH
} catch (Exception e) {
echo e.toString()
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Рассмотрите возможность добавления более информативного сообщения об ошибке в блоке catch. Например, указание на то, что произошла ошибка при попытке извлечения расширений, может помочь в диагностике проблем.

- echo e.toString()
+ echo "Ошибка при попытке извлечения расширений: ${e.toString()}"

Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation.

Suggested change
try {
unstash GetExtensions.EXTENSIONS_STASH
} catch (Exception e) {
echo e.toString()
}
try {
unstash GetExtensions.EXTENSIONS_STASH
} catch (Exception e) {
echo "Ошибка при попытке извлечения расширений: ${e.toString()}"
}

@ivanmolodec
Copy link
Contributor

Я потестировал PR, шаг работает отлично, публикует и в jUnit и в Allure (хотя с аллюром вопрос - можно ли сгруппировать тесты, сейчас они идут просто по-одному списком, если публиковать в аллюр ещё дымовые/бдд то там каша получается).
Есть один вопрос:
2024-04-26_13-29-51
Вот так выглядит сейчас сборочная линия, зачем нужен шаг загрузки расширений перед каждым шагом проверки? Чисто логически мы 1 раз загружаем все расширения (кроме яксюнита) вначале, далее они уже на всех шагах присутствуют. А вот как раз перед шагом юнит тестов надо загрузить яксюнит. Потому что сейчас у меня например дымовые стали падать потому что начали проверять открытие обработок яксюнита.

@ovcharenko-di
Copy link
Contributor Author

@ivanmolodec загрузка\незагрузка расширения YAXUnit - это только один частный случай. Допускаю, что возможность загружать\не загружать то или иное расширение может пригодиться и в других стейджах. Соответственно, нужна гибкая настройка.

Кстати, если при запуске дымовых в базе стали открываться обработки YAXUnit, значит, проект сконфигурирован не совсем правильно: для расширения YAXUnit необходимо указать stages: ['yaxunit']. Тогда это расширение будет загружено только перед выполнением yaxunit.

Логика обработки расширений в пайплайне такая:

  1. в базу загружаются все расширения, для которых в конфиге не указаны stages
  2. выполняется архивация ИБ
    далее, параллельно для каждого stage:
  3. выполняется разархивация ИБ
  4. в базу загружаются расширения, для которых в конфиге в списке stages указан текущий stage

@ivanmolodec
Copy link
Contributor

@ivanmolodec загрузка\незагрузка расширения YAXUnit - это только один частный случай. Допускаю, что возможность загружать\не загружать то или иное расширение может пригодиться и в других стейджах. Соответственно, нужна гибкая настройка.

Кстати, если при запуске дымовых в базе стали открываться обработки YAXUnit, значит, проект сконфигурирован не совсем правильно: для расширения YAXUnit необходимо указать stages: ['yaxunit']. Тогда это расширение будет загружено только перед выполнением yaxunit.

Логика обработки расширений в пайплайне такая:

  1. в базу загружаются все расширения, для которых в конфиге не указаны stages
  2. выполняется архивация ИБ
    далее, параллельно для каждого stage:
  3. выполняется разархивация ИБ
  4. в базу загружаются расширения, для которых в конфиге в списке stages указан текущий stage

Да, теперь понятно. Просто нигде в ридми это не прописано, или ткни меня туда) Если нет, то стоит дописать потому что не очевидно

@ivanmolodec
Copy link
Contributor

ivanmolodec commented May 2, 2024

Что-то у меня при такой настройке конфигурации он подключил расширение и при инициализации, и перед шагом юнит-тестов. Что я делаю не так?)

   "initInfobase": {
        "initMethod": "fromSource",
        "extensions": [
            {
                "name": "YAXUnit",
                "initMethod": "fromSource",
                "path": "src/cfe/YAXUnit",
                "stages": ["yaxunit"]
            }
        ]
    }

@ovcharenko-di
Copy link
Contributor Author

@ivanmolodec посмотрю

@nixel2007
Copy link
Member

@ovcharenko-di посмотри нет ли конфликтов после мержа соседнего мр, пожалуйста.

@ovcharenko-di
Copy link
Contributor Author

@nixel2007 ок, позже

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Out of diff range and nitpick comments (1)
README.md (1)

Line range hint 183-187: Исправьте форматирование ненумерованных списков в markdown. Вместо тире используйте звездочки, и убедитесь, что отступы соответствуют уровню вложенности.

-  * По умолчанию версия модуля EDT не заполнена, т.к. в случае единственной версии для утилиты ring дополнительного указания не требуется (`edtVersion`). 
+  * По умолчанию версия модуля EDT не заполнена, т.к. в случае единственной версии для утилиты ring дополнительного указания не требуется (`edtVersion`).
Review Details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits Files that changed from the base of the PR and between e92dc31 and a7eca18.
Files selected for processing (4)
  • README.md (5 hunks)
  • src/ru/pulsar/jenkins/library/IStepExecutor.groovy (1 hunks)
  • src/ru/pulsar/jenkins/library/StepExecutor.groovy (1 hunks)
  • vars/pipeline1C.groovy (2 hunks)
Additional comments not posted (4)
src/ru/pulsar/jenkins/library/IStepExecutor.groovy (1)

29-30: Добавление метода writeFile соответствует стилю и принципам проектирования интерфейса. Отличная работа!

src/ru/pulsar/jenkins/library/StepExecutor.groovy (1)

45-48: Реализация метода writeFile корректно делегирует операцию записи файла объекту steps, что является типичным подходом в Jenkins shared libraries. Отличная работа!

vars/pipeline1C.groovy (1)

Line range hint 207-320: Добавлены этапы для распаковки информационной базы и загрузки расширений, специфичных для BDD и дымовых тестов. Эти изменения улучшают функциональность пайплайна и соответствуют целям проекта.

README.md (1)

207-210: Добавлены подробные инструкции для настройки шага YAXUnit, что улучшает документацию и предоставляет полезную информацию пользователям.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Review Details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits Files that changed from the base of the PR and between a7eca18 and 1e8a4ef.
Files ignored due to path filters (1)
  • test/unit/resources/jobConfiguration.json is excluded by !**/*.json
Files selected for processing (2)
  • src/ru/pulsar/jenkins/library/steps/LoadExtensions.groovy (2 hunks)
  • test/unit/groovy/ru/pulsar/jenkins/library/steps/LoadExtensionsTest.java (1 hunks)
Additional comments not posted (3)
test/unit/groovy/ru/pulsar/jenkins/library/steps/LoadExtensionsTest.java (1)

25-28: Метод setUp корректно настраивает тестовую среду.

src/ru/pulsar/jenkins/library/steps/LoadExtensions.groovy (2)

19-25: Конструктор и метод getExtensionsFiltered корректно реализованы.


80-95: Метод getVrunnerSettingsForStage корректно реализован.

Comment on lines +24 to +49
Extension[] getExtensionsFiltered() {
return extensionsFiltered
}

def run() {
IStepExecutor steps = ContextRegistry.getContext().getStepExecutor()

Logger.printLocation()

def env = steps.env();
def extensions = this.config.initInfoBaseOptions.extensions

if (this.stageName) {
this.extensionsFiltered = extensions.findAll { extension ->
extension.stages.contains(this.stageName)
}
}
else {
this.extensionsFiltered = extensions.findAll { extension -> extension.stages.length == 0 || extension.stages.contains("initInfoBase") }
}

def env = steps.env()
String cfeDir = "$env.WORKSPACE/$GetExtensions.EXTENSIONS_OUT_DIR"

String vrunnerPath = VRunner.getVRunnerPath();
config.initInfoBaseOptions.extensions.each {
String vrunnerPath = VRunner.getVRunnerPath()

this.extensionsFiltered.each {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В методе run необходимо добавить экранирование для Unix путей в параметре executeParameter.

-        if (steps.isUnix()) {
-            executeParameter = '\\' + executeParameter
+        if (steps.isUnix()) {
+            executeParameter = '\\\\' + executeParameter

Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation.

Suggested change
Extension[] getExtensionsFiltered() {
return extensionsFiltered
}
def run() {
IStepExecutor steps = ContextRegistry.getContext().getStepExecutor()
Logger.printLocation()
def env = steps.env();
def extensions = this.config.initInfoBaseOptions.extensions
if (this.stageName) {
this.extensionsFiltered = extensions.findAll { extension ->
extension.stages.contains(this.stageName)
}
}
else {
this.extensionsFiltered = extensions.findAll { extension -> extension.stages.length == 0 || extension.stages.contains("initInfoBase") }
}
def env = steps.env()
String cfeDir = "$env.WORKSPACE/$GetExtensions.EXTENSIONS_OUT_DIR"
String vrunnerPath = VRunner.getVRunnerPath();
config.initInfoBaseOptions.extensions.each {
String vrunnerPath = VRunner.getVRunnerPath()
this.extensionsFiltered.each {
Extension[] getExtensionsFiltered() {
return extensionsFiltered
}
def run() {
IStepExecutor steps = ContextRegistry.getContext().getStepExecutor()
Logger.printLocation()
def extensions = this.config.initInfoBaseOptions.extensions
if (this.stageName) {
this.extensionsFiltered = extensions.findAll { extension ->
extension.stages.contains(this.stageName)
}
}
else {
this.extensionsFiltered = extensions.findAll { extension -> extension.stages.length == 0 || extension.stages.contains("initInfoBase") }
}
if (steps.isUnix()) {
executeParameter = '\\\\' + executeParameter
def env = steps.env()
String cfeDir = "$env.WORKSPACE/$GetExtensions.EXTENSIONS_OUT_DIR"
String vrunnerPath = VRunner.getVRunnerPath()
this.extensionsFiltered.each {

@ovcharenko-di
Copy link
Contributor Author

@ivanmolodec спасибо, я нашел и исправил ошибку. сейчас расширения лишний раз не должны загружаться

@nixel2007 влил develop, все по прежнему красиво

@ivanmolodec
Copy link
Contributor

@ivanmolodec спасибо, я нашел и исправил ошибку. сейчас расширения лишний раз не должны загружаться

@nixel2007 влил develop, все по прежнему красиво

Спасибо! Проверил, загрузилось только перед шагом яксюнита, сборка полностью зеленая)

}

if (options.publishToAllureReport) {
String allureReport = "./build/out/allure/yaxunit/junit.xml"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Аналогично.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@nixel2007 конкретно здесь библиотека просто копирует ./build/out/yaxunit/junit.xml в ./build/out/allure/yaxunit/junit.xml, конечный путь пользователь не переопределяет

@nixel2007
Copy link
Member

@ovcharenko-di @ivanmolodec посоны, ещё один follow-up :(

@nixel2007
Copy link
Member

@ivanmolodec организуешь красивый скрин? :)

@ivanmolodec
Copy link
Contributor

@ivanmolodec организуешь красивый скрин? :)
jenkins-lib
Не знаю насколько он красивый конечно)

@nixel2007
Copy link
Member

@ivanmolodec для полной красоты осталось едт настроить)

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Review Details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits Files that changed from the base of the PR and between 1e8a4ef and 18c2ade.
Files selected for processing (1)
  • README.md (5 hunks)
Files skipped from review as they are similar to previous changes (1)
  • README.md

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Out of diff range and nitpick comments (1)
README.md (1)

Line range hint 184-188: В списке настроек загрузки расширений используется неправильный символ для элементов списка (тире вместо астериска) и неправильный отступ. Это нарушает единообразие стиля документации.

- - При загрузке из исходников расширения должны быть в том же формате(edt или конфигуратора) что и основная конфигурация.
- - Для загрузки расширений необходимо описать каждое из них в массиве (`initInfobase` -> `extensions`)
+ * При загрузке из исходников расширения должны быть в том же формате(edt или конфигуратора) что и основная конфигурация.
+ * Для загрузки расширений необходимо описать каждое из них в массиве (`initInfobase` -> `extensions`)
Review Details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits Files that changed from the base of the PR and between 18c2ade and 317d39f.
Files selected for processing (1)
  • README.md (6 hunks)
Additional comments not posted (2)
README.md (2)

39-39: Добавлено упоминание о сохранении результатов юнит-тестов с помощью фреймворка YAXUnit в формате jUnit и Allure.


210-212: Добавлены инструкции по настройке шага YAXUnit, включая добавление расширений и использование собственного файла yaxunit.json. Это улучшает гибкость и настройку процесса тестирования.

README.md Show resolved Hide resolved
@nixel2007 nixel2007 merged commit 337d1ee into firstBitMarksistskaya:develop May 8, 2024
1 check passed
@nixel2007
Copy link
Member

Огромное спасибо, ребята!

@nixel2007 nixel2007 mentioned this pull request May 8, 2024
@ovcharenko-di ovcharenko-di deleted the yaxunit-pr branch December 22, 2024 08:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants